package borrador;

import java.util.LinkedList;
import java.util.List;

import logica.*;

public class VehiculoHerenciaMultiple
{
	private Proyecto proy;
	private Diagrama diag;
	
	private Entidad vehiculo;
	private Entidad triciclo;
	private Entidad cuatriciclo;
	private Entidad auto;
	private Entidad camion;
	
	private Jerarquia tipo;
	private Jerarquia cantRuedas;
	
	public VehiculoHerenciaMultiple() throws AtributoRepetidoException, SinNombreException, AtributoIdentificadorFaltanteException, EntidadIdentificadoraFaltanteException, IdentificadorVacioException, IdExternoRepetidoException, JerarquiaException, EntidadRepetidaException, IdExternoInexistenteException 
	{
		crearEntidadVehiculo();
		crearEntidadCuatriciclo();
		crearEntidadTriciclo();
		crearEntidadAuto();
		crearEntidadCamion();
		crearJerarquiaTipo();
		crearJerarquiaCantRuedas();
		crearEstructuraProyecto();
	}
	
	public String getNombre() {
		return "BoleteriaTeatro";
	}
	
	
	public Entidad getVehiculo() {
		return vehiculo;
	}

	public void setSeccionVehiculo(Entidad vehiculo) {
		this.vehiculo = vehiculo;
	}

	public Entidad getTriciclo() {
		return triciclo;
	}

	public void setTriciclo(Entidad triciclo) {
		this.triciclo = triciclo;
	}

	public Entidad getCuatriciclo() {
		return cuatriciclo;
	}

	public void setCuatriciclo(Entidad cuatriciclo) {
		this.cuatriciclo = cuatriciclo;
	}

	public Entidad getAuto() {
		return auto;
	}

	public void setAuto(Entidad auto) {
		this.auto = auto;
	}

	public Entidad getCamion() {
		return camion;
	}

	public void setCamion(Entidad camion) {
		this.camion = camion;
	}

	public Jerarquia getJerarquiaTipo() {
		return tipo;
	}

	public void setJerarquiaTipo(Jerarquia tipo) {
		this.tipo = tipo;
	}

	public Jerarquia getJerarquiaCantRuedas() {
		return cantRuedas;
	}

	public void setJerarquiaCantRuedas(Jerarquia cantRuedas) {
		this.cantRuedas = cantRuedas;
	}

	private void crearEntidadVehiculo() throws AtributoRepetidoException, SinNombreException, AtributoIdentificadorFaltanteException, EntidadIdentificadoraFaltanteException, IdentificadorVacioException 
	{
		vehiculo = new Entidad("Vehiculo");
		vehiculo.setTipo(TipoDeEntidad.COSA);
		
		Atributo patente = new AtributoSimple("patente");
//		Atributo nomSecc = new AtributoSimple("nomSecc");
//		
		vehiculo.agregarAtributo(patente);
//		vehiculo.agregarAtributo(nomSecc);
//		
		Identificador id1 = new Identificador();
		id1.agregarAtributoIdentificador(patente);
//		Identificador id2 = new Identificador();
//		id2.agregarAtributoIdentificador(nomSecc);
//		
//		vehiculo.agregarIdentificador(id1);
//		vehiculo.agregarIdentificador(id2);		
	}
	
	private void crearEntidadCuatriciclo() throws AtributoRepetidoException, SinNombreException, AtributoIdentificadorFaltanteException, EntidadIdentificadoraFaltanteException, IdentificadorVacioException 
	{
		cuatriciclo = new Entidad("Cuatriciclo");
		cuatriciclo.setTipo(TipoDeEntidad.COSA);
		
//		Atributo idObra = new AtributoSimple("idObra");
//		Atributo titulo = new AtributoSimple("titulo");
//		
//		cuatriciclo.agregarAtributo(idObra);
//		cuatriciclo.agregarAtributo(titulo);
//		cuatriciclo.agregarAtributo(new AtributoSimple("genero"));
//		cuatriciclo.agregarAtributo(new AtributoSimple("nroProxFunc"));
//		cuatriciclo.agregarAtributo(new AtributoSimple("autor", 1, -1));
//		cuatriciclo.agregarAtributo(new AtributoSimple("director", 1, -1));
//		
//		Identificador id1 = new Identificador();
//		id1.agregarAtributoIdentificador(idObra);
//		Identificador id2 = new Identificador();
//		id2.agregarAtributoIdentificador(titulo);
//		
//		cuatriciclo.agregarIdentificador(id1);
//		cuatriciclo.agregarIdentificador(id2);
	}

	private void crearEntidadTriciclo() throws AtributoRepetidoException, SinNombreException, IdExternoRepetidoException, AtributoIdentificadorFaltanteException, EntidadIdentificadoraFaltanteException, IdentificadorVacioException
	{
		triciclo = new Entidad("Triciclo");
		triciclo.setTipo(TipoDeEntidad.COSA);

//		Atributo fila = new AtributoSimple("fila");
//		Atributo nroButaca = new AtributoSimple("nroButaca");
//		
//		triciclo.agregarAtributo(fila);
//		triciclo.agregarAtributo(nroButaca);
//		
//		triciclo.agregarEntidadExterna(vehiculo);
//		
//		Identificador id = new Identificador();
//		id.agregarAtributoIdentificador(fila);
//		id.agregarAtributoIdentificador(nroButaca);
//		id.agregarEntidadIdentificadora(vehiculo);
//		
//		triciclo.agregarIdentificador(id);
	}
	
	private void crearEntidadAuto() throws AtributoRepetidoException, SinNombreException, IdExternoRepetidoException, AtributoIdentificadorFaltanteException, EntidadIdentificadoraFaltanteException, IdentificadorVacioException
	{
		auto = new Entidad("Auto");
		auto.setTipo(TipoDeEntidad.COSA);

//		Atributo nroFunc = new AtributoSimple("nroFunc");
//		Atributo fecha = new AtributoSimple("fecha");
//		Atributo hora = new AtributoSimple("hora");
//		
//		auto.agregarAtributo(hora);
//		auto.agregarAtributo(fecha);
//		auto.agregarAtributo(nroFunc);
//		
//		auto.agregarEntidadExterna(cuatriciclo);
//		
//		Identificador id1 = new Identificador();
//		id1.agregarAtributoIdentificador(nroFunc);
//		id1.agregarEntidadIdentificadora(cuatriciclo);
//	
//		auto.agregarIdentificador(id1);
//		
//		Identificador id2 = new Identificador();
//		id2.agregarAtributoIdentificador(fecha);
//		id2.agregarAtributoIdentificador(hora);
//		id2.agregarEntidadIdentificadora(cuatriciclo);
//		
//		auto.agregarIdentificador(id2);
	}
	
	private void crearEntidadCamion() throws SinNombreException
	{
		camion = new Entidad("Camion");
		camion.setTipo(TipoDeEntidad.COSA);

//		Atributo nroFunc = new AtributoSimple("nroFunc");
//		Atributo fecha = new AtributoSimple("fecha");
//		Atributo hora = new AtributoSimple("hora");
//		
//		auto.agregarAtributo(hora);
//		auto.agregarAtributo(fecha);
//		auto.agregarAtributo(nroFunc);
//		
//		auto.agregarEntidadExterna(cuatriciclo);
//		
//		Identificador id1 = new Identificador();
//		id1.agregarAtributoIdentificador(nroFunc);
//		id1.agregarEntidadIdentificadora(cuatriciclo);
//	
//		auto.agregarIdentificador(id1);
//		
//		Identificador id2 = new Identificador();
//		id2.agregarAtributoIdentificador(fecha);
//		id2.agregarAtributoIdentificador(hora);
//		id2.agregarEntidadIdentificadora(cuatriciclo);
//		
//		auto.agregarIdentificador(id2);
	}
	
	private void crearJerarquiaTipo() throws SinNombreException, JerarquiaException
	{
		List<Entidad> entidadesEspecialadas = new LinkedList<Entidad>();
		entidadesEspecialadas.add(getAuto());
		entidadesEspecialadas.add(getCamion());
		
		tipo = new Jerarquia("tipo", getVehiculo(), entidadesEspecialadas);
	}
	
	private void crearJerarquiaCantRuedas() throws JerarquiaException, SinNombreException
	{
		List<Entidad> entidadesEspecialadas = new LinkedList<Entidad>();
		entidadesEspecialadas.add(getCuatriciclo());
		entidadesEspecialadas.add(getTriciclo());
		
		cantRuedas = new Jerarquia("cant Ruedas", getVehiculo(), entidadesEspecialadas);
	}
	
	public void crearEstructuraProyecto () throws SinNombreException, EntidadRepetidaException, IdExternoInexistenteException 
	{
		proy = new Proyecto(this.getNombre());
		diag = proy.getDiagramaPpal();
			
		diag.agregarObjetoDiagrama(this.getVehiculo());
		diag.agregarObjetoDiagrama(this.getTriciclo());
		diag.agregarObjetoDiagrama(this.getCuatriciclo());
		diag.agregarObjetoDiagrama(this.getAuto());
		diag.agregarObjetoDiagrama(this.getCamion());
		diag.agregarObjetoDiagrama(this.getJerarquiaTipo());
		diag.agregarObjetoDiagrama(this.getJerarquiaCantRuedas());		
	}
	
	public Proyecto getProyecto () {
		return proy;
	}
}
